/******************************************************************************/
/*  Class UART1                                                               */
/*  SW: S. Maslyakov, rusoil.9@gmail.com                                      */
/*                                                                            */
/*  Revision:     1.1                                                         */
/*  Date:         2010/12/24 13:37:33                                         */
/******************************************************************************/


#ifndef __UART1_H
#define __UART1_H


#include "Uart\uart_def.h"


#define UART1_RX_EVENT        (0x00000001)
#define UART1_TX_EVENT        (0x00000002)
#define UART1_SOFT_RX_EVENT   (0x00000004)



//==============================================================================
//  Class UART1
//==============================================================================
class UART1
{
public:
  static void Init_Uart(const uint32_t _baudrate, const uint8_t _key);
  static void TxData(const uint8_t * const _pData, const uint32_t _dataLen);
  static void RxByte(const uint8_t _data);
  static void RxData(const uint8_t * _pData, const uint32_t _dataLen);
  static void * Get_uart_event();
  static uint32_t GetRxData(uint8_t * const _pBuff);
  static uint8_t TxByte();
  inline static void SetDtr() { U1MCR_bit.DTR = 1; }
  inline static void ClearDtr() { U1MCR_bit.DTR = 0; }
  inline static void ClearRts() { U1MCR_bit.RTS = 0; }
  inline static void SetRts() { U1MCR_bit.RTS = 1; }
  inline static void EnableInt() { U1IER = IER_RBR|IER_THRE|IER_RLS|IER_MODEM; }
  inline static void DisableInt() { U1IER = 0; }
  inline static void ClearRxBuff() { uart.rx.dataLen = 0; }
  inline static bool_t GetRiState() { return (U1MSR & MSR_RI) ? TRUE_T : FALSE_T; }
  inline static bool_t TestTxEnd() { return (U1LSR & LSR_TEMT) ? TRUE_T : FALSE_T; }
  inline static bool_t TestTxBufferIsEmpty() { return (uart.tx.dataLen) ? FALSE_T : TRUE_T; }
  inline static uint32_t GetRxDataLen() { return uart.rx.dataLen; }

private:
  static void StartTx();
  static void Create_uart_event();

  static __UART_TOOLS uart;
};
//==============================================================================
//==============================================================================


#endif